/**
 * request 网络请求工具
 * 更详细的 api 文档: https://github.com/umijs/umi-request
 */
import { extend } from 'umi-request';
import { notification, message, Modal } from 'antd';
import { stringify } from 'qs';

const codeMessage = {
  200: '服务器成功返回请求的数据。',
  201: '新建或修改数据成功。',
  202: '一个请求已经进入后台排队（异步任务）。',
  204: '删除数据成功。',
  400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
  401: '用户没有权限（令牌、用户名、密码错误）。',
  403: '用户得到授权，但是访问是被禁止的。',
  404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误，请检查服务器。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。',
};

/**
 * 异常处理程序
 */
const errorHandler = (error: { response: Response }) => {
  const { response } = error;
  console.log('error', response);

  if (response && response.status) {
    // const errorText = response.statusText || codeMessage[response.status];
    // const { status, url } = response;

    if ((response.status == 401 || response.status == 400 || response.status == 403) && window.location.pathname != '/user/login') {
      window.location.replace(
        `/user/login?${stringify({
          redirect: window.location.href,
        })}`,
      );
      // Modal.error({
      //   title: '请求错误',
      //   okText: '去登录',
      //   content: '用户未登录或登录过期',
      //   onOk: () => {
      //     window.location.replace(
      //       `/user/login?${stringify({
      //         redirect: window.location.href,
      //       })}`,
      //     );
      //   },
      // });
      return response;
    }

    if (response.status >= 400) {
      response.json().then(res => {
        if (res.code !== '0') {
          // notification.error({
          //   message: `请求错误 ${status}: ${response.url}`,
          //   description: res.message,
          // });
          message.error(res.message)
        }
      });
      return response;
    }

    // notification.error({
    //   message: `请求错误 ${status}: ${url}`,
    //   description: errorText,
    // });
  } else if (!response) {
    notification.error({
      description: '您的网络发生异常，无法连接服务器',
      message: '网络异常',
    });
  }
  return response;
};

/**
 * 配置request请求时的默认参数
 */
const request = extend({
  errorHandler, // 默认错误处理
  credentials: 'omit', // 默认请求是否带上cookie
  headers: {
    Authorization: `Bearer ${localStorage.getItem('access_token') || ''}`, // 统一的headers
  },
});

request.interceptors.request.use((url, options) => {
  if (/^\/api\/biz/.test(url)) {
    url = require('@/../config.json').apiHost + url;
  }
  return {
    url,
    options: { ...options, interceptors: true },
  };
});

export default request;
